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

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());
    }
}

最终实现效果:


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值