Android App 开发 设计模式第四篇:工厂方法模式

来源:互联网 发布:软件性能测试报告案例 编辑:程序博客网 时间:2024/05/29 18:34

Factory Method Pattern

模板模式的衍生品?


以Template Method Pattern 架构获取产生对象实例的工厂就是Factory Method Pattern。

工厂方法模式在父类规定对象的创建方法,但并没有深入到较具体的类名。所有具体的

完整内容 都放在子类。根据这个原则,我们可以大致分成产生对象实例的大纲(框

架)和实际生产对象实例的类两方面。

场景模拟


以一个工厂进厂打工为原型,工人们进厂须先登记信息,由所登记的信息进入创建工

卡,工人们每天进厂必须使用工卡打卡,开始一天的劳动。以此为例,进行编程,设计

UML图如下:


程序实现


抽象类Product定义抽象方法create ()表示创建用工card 信息和use () 表示用户使用card

抽象类Factory实现方法create 的抽象类,这里就是我们上文所说的为什么是模板方法模式衍生品。和定义抽象方法createProduct()、抽象方法registerProduct() 交由子类负责完成 。

类IDcard 继承自Product 实现方法use 和create

类IDCardFactory 继承 自Factory 实现方法createProduct、registerProduct

Product 抽象类

public abstract class Product {     public abstract String create();     public abstract String use();}

Factory 抽象类

public abstract class Factory {    public final Product create(String owner) {        Product p = createProduct(owner);        registerProduct(p);        return p;    }     protected abstract Product createProduct(String owner);     protected abstract void registerProduct(Product product);}

IDCard 类

public class IDCard extends Product{     private String owner;     public IDCard(String owner) {        // TODO Auto-generated constructor stub         this.owner=owner;    }     @Override    public String use() {        // TODO Auto-generated method stub        return "使用"+owner+"的卡";    }     public String getOwner(){        return owner;    }     @Override    public String create() {        // TODO Auto-generated method stub        return "建立 "+owner+"的卡";    }}

IDCardFactory 类

public class IDCardFactory extends Factory{     private Vector owners=new Vector();     @Override    protected Product createProduct(String owner) {        // TODO Auto-generated method stub        return new IDCard(owner);    }     @Override    protected void registerProduct(Product product) {        // TODO Auto-generated method stub        owners.add(((IDCard)product).getOwner());    }     public Vector getOwners(){        return owners;    } }

界面代码实现 FatoryMethodActivity:

public class FatoryMethodActivity extends Activity implements OnClickListener {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);         ((Button) findViewById(R.id.Button01)).setOnClickListener(this);     }     @Override    public void onClick(View v) {        // TODO Auto-generated method stub         Factory factory = new IDCardFactory();        Product card1 = factory.create("terry");        Product card2 = factory.create("paul");        Product card3 = factory.create("jim");        ((EditText) findViewById(R.id.EditText01)).setText(card1.create()+","                + card1.use() + "\n" + card2.create() +","+ card2.use() + "\n"                + card3.create() +","+ card3.use());    }}

最终实现效果:


原创粉丝点击