[2020-02-29] 原型模式与建造者模式详解

1.用JSON方式实现一个原型模式的深克隆,并画出UML图

public class Book implements Cloneable {

private String title;
private double price;
private List<String> imges = new ArrayList<String>();

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

public List<String> getImges() {
return imges;
}

public void setImges(List<String> imges) {
this.imges = imges;
}

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}

@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", price=" + price +
", imges=" + imges +
'}';
}
}

public interface IPrototype<T> {

public T clone(T src);

public T deepClone(T src);
}


public class BookPrototype implements IPrototype<Book> {
@Override
public Book clone(Book src) {
try {
return (Book)src.clone();
}catch (Exception e){
return null;
}
}

@Override
public Book deepClone(Book src) {
String bookString = JSONObject.toJSONString(src);
Book book = JSONObject.parseObject(bookString, Book.class);
return book;
}
}

public class Test {

public static void main(String[] args) {
Book b1 = new Book();
b1.setTitle("java设计模式");
b1.setPrice(30.56);
b1.getImges().add("img1");
System.out.println(b1);

BookPrototype bookPrototype = new BookPrototype();

Book b2 = bookPrototype.clone(b1);
b2.getImges().add("img2");
System.out.println(b2);
System.out.println(b1==b2);
System.out.println(b1.getImges()==b2.getImges());

System.out.println("========================================");

Book b3 = bookPrototype.deepClone(b1);
b3.getImges().add("img3");
System.out.println(b3);
System.out.println(b1==b3);
System.out.println(b1.getImges()==b3.getImges());
}
}

2.请列举1-3个需要用到建造者模式的业务场景。

A.厨师做菜  B.老师授课  C.工厂生产线

猜你喜欢

转载自www.cnblogs.com/it-szp/p/12394185.html