Java模板模式之浅拷贝

来源:互联网 发布:snmp网管软件 免费 编辑:程序博客网 时间:2024/06/17 12:34
public class Client {   //从调用者代码进入    public static void main(String[] args) {        SmallProduct product=new SmallProduct();        product.setProductNumber(330);        product.setProductName("小产品A类");        DealFactory factory=new DealFactory();        factory.dealProduct(product);    }//接下来是SmllProduct类代码public class SmallProduct implements BaseProduct {    private int productNumber;    private String productName;    @Override    public int getProductNumber() {        // TODO Auto-generated method stub        return productNumber;    }    @Override    public void setProductNumber(int productNumber) {        // TODO Auto-generated method stub        this.productNumber=productNumber;    }    @Override    public IProType clonePro() {        // TODO Auto-generated method stub        SmallProduct product=new SmallProduct();        product.setProductNumber(productNumber);        product.setProductName(productName);        return product;    }    public String getProductName() {        return productName;    }    public void setProductName(String name) {        this.productName=name;    }}

产品基类的代码

public interface IProType {    public IProType clonePro();}public interface BaseProduct extends IProType {    int getProductNumber();    void setProductNumber(int productNumber);}

最后是工厂类代码,调用者根本就不用关心怎么保留初始“product”,调用者处理的“product”都是clone过来的,任何的修改都是在clone出来的新产品基础上进行修改,而原“product”都是不改变的,模板设计很好的隐藏的clone过程。

public class DealFactory {    public void dealProduct(BaseProduct product) {        // 如果不是模板方式,就要分类判断,不利于拓展        if (product instanceof SmallProduct) {            String name=((SmallProduct) product).getProductName();            System.out.println("test=原地址:" + product.hashCode() + "||名字:" + name);        }        //下面是模板设计模式,        int number = product.getProductNumber();        while (number > 0) {            BaseProduct pro = (BaseProduct) product.clonePro();            pro.setProductNumber(number > 100 ? 100 : number);            number -= 100;            if(product instanceof SmallProduct) {            String name1=((SmallProduct) pro).getProductName();            System.out.print("分流之后=name="+name1);            }            System.out.println("=test=分流之后=number:" + pro.getProductNumber() + "||地址:" + pro.hashCode());        }    }}

最后的运行效果:
这里写图片描述

原创粉丝点击