android 开发-设计模式(二)

 

 

 

一 . 简单工厂模式

1.Factory:工厂类,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

2.IProduct:抽象产品类,这是简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

3.Product:具体产品类,这是简单工厂模式的创建目标。

1.简单工厂模式的简单实现

(1)抽象产品类

我们创建一个计算机的抽象产品类,其有一个抽象方法用于启动计算机

public abstract class Computer
{
    abstract void start();//定义成抽象方法是为了所有都要重写该方法

}

(2)具体产品类

接着创建各个品牌的计算机,其都继承了自己的父类Comuter,并实现了父类的start方法,具体的计算机产品分别是联想,惠普。

public class LeComputer
{

    public static class LeComputer2 extends Computer
    {
        @Override
        void start()
        {

        }
    }

    public static class LeComputer3 extends Computer
    {
        @Override
        void start()
        {

        }
    }
}

(3)工厂类

接下来创建一个工厂类,它提供了一个静态方法creatComputer用来生产计算机,你只需要传入自己想生产的计算机的品牌,他就会实例化相应的计算机对象

public class ComputerFac
{
    public static Computer createComputer(String type)
    {
        Computer computer = null;
        switch (type)
        {
            case "leve":
                computer = new LeComputer.LeComputer2();
                break;
            case "lsls":
                computer = new LeComputer.LeComputer3();
                break;
        }
        return computer;
    }
}

(4)调用工厂类

传入对应的type则调用对应的Computer方法

 public static void main(String[] args)
    {
        ComputerFac.createComputer("le").start();
    }

2 使用简单工厂模式的场景和优缺点

使用场景:

  工厂类负责创建的对象比较少

  客户只需知道传入工厂类的参数,而无须关心创建对象的逻辑

优点:使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性。

缺点:可实例化的类型在编译期间已经被确定。如果增加新类型,则需要修改工厂,这违背了开放封闭原则。当子类过多或者子类层次过多时不适合使用。

3 工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。

 1.工厂方法模式的简单实现

(1)创建抽象工厂

抽象工厂里面有一个creatComputer方法,想生产哪个品牌的计算机就生产哪个品牌的

public abstract class Computeractory
{
    public abstract <T extends Computer> T createComputr(Class<T> clz);
}

(2)具体工厂

广达代工厂是一个具体的工厂,其继承抽象工厂,通过反射来生产不同厂家的计算机

public class GDComputerFactor extends Computeractory
{
    @Override
    public <T extends Computer> T createComputr(Class<T> clz)
    {
        Computer computer = null;
        String classname = clz.getName();
        try
        {
            computer = (Computer) Class.forName(classname).newInstance();
        } catch (IllegalAccessException e)
        {
            e.printStackTrace();
        } catch (InstantiationException e)
        {
            e.printStackTrace();
        } catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        return (T) computer;
    }
}

(3)客户端创建GDC,并分别生产

public class Client
{
    public static void main(String[] args)
    {
        Computeractory computeractory = new GDComputerFactor();
        LeComputer.LeComputer2 computer = computeractory.createComputr(LeComputer.LeComputer2.class);
        computer.start();
    }
}

工厂方法与简单工厂

对于简单工厂模式,我们都知道其在工厂类中包含了必要的逻辑判断,根据不同的条件动态实例化相关的类,对于客户端,只要增加新的对象就在工厂类中添加一个新的Case ,工厂方法模式没有违背这个开放封闭原则。直接在里面创建产品

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值