设计模式—工厂模式

1.简单工厂(特例)


java实现代码


TV.java

package com.jsly.simple;

public interface TV {
   
    //打开电视
    public void turnOn();
   
    //关闭电视
    public void turnOff();
   
}



HaiErTV.java

package com.jsly.simple;

public class HaiErTV implements TV {

    public void turnOff() {
        System.out.println("HaiErTV.turnOff()");
    }

    public void turnOn() {
        System.out.println("HaiErTV.turnOn()");
    }

}



ChangHongTV.java

package com.jsly.simple;

public class ChangHongTV implements TV {

    public void turnOff() {
        System.out.println("ChangHongTV.turnOff()");
    }

    public void turnOn() {
        System.out.println("ChangHongTV.turnOn()");
    }

}




TVFactory.java

package com.jsly.simple;

public class TVFactory {
    public static final String HaiEr = "海尔";
    public static final String ChangHong = "长虹";
    public static TV createTV(String name){
        TV tv = null;
        if(HaiEr.equals(name)){
            //........
            //........
            //生产海尔电视的方法
            tv = new HaiErTV();
        }else if(ChangHong.equals(name)){
            //........
            //........
            //生产长虹电视的方法
            tv = new ChangHongTV();
        }else{
            throw new RuntimeException("无法生产!");
        }
        return tv;
    }

}




Client.java

package com.jsly.simple;

public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //TV tv = TVFactory.createTV(TVFactory.HaiEr);          //TVFactory生产海尔TV
        TV tv = TVFactory.createTV(TVFactory.ChangHong);      //TVFactory生产长虹TV
        tv.turnOn();
    }

}







2.工厂方法




java实现代码

TV.java 、HaiErTV.java 、 ChangHongTV.java无须改变


TVFactory.java

package com.jsly.simple;

public interface TVFactory {
   
    //生产电视抽象方法
    public TV createTV();

}




TVFactoryForHaiEr.java

package com.jsly.simple;

public class TVFactoryForHaiEr implements TVFactory {

    public TV createTV() {
        //........
        //........
        //生产海尔电视的方法
        return new HaiErTV();
    }

}




TVFactoryForChangHong.java

package com.jsly.simple;

public class TVFactoryForChangHong implements TVFactory {

    public TV createTV() {
        //........
        //........
        //生产长虹电视的方法
        return new ChangHongTV();
    }

}



Client.java

package com.jsly.simple;

public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {

        //TVFactory factory = new TVFactoryForHaiEr(); //创建生产海尔TV的TVFactory
        TVFactory factory = new TVFactoryForChangHong(); //创建生产长虹TV的TVFactory
        TV tv = factory.createTV();
        tv.turnOn();
    }

}



如果要在第一种方式中要添加一个海信电视,则需要修改TVFactory,即生产电视的方法,会影响到其他;

如果要在第一种方式中要添加一个海信电视,则需要添加一个海信电视生产厂(TVFactoryForHaiXin)来实现TVFactory,不会影响到其他;


工厂方法的优点:支持OCP原则。

工厂方法的使用场景:单一系列产品创建。



扩展:Open-Closed Principle 软件设计中的“开-闭原则”

  这个原则最早是由Bertrand Meyer提出,英文的原文是:Software entities should be open for extension,but closed for modification.意思是说,一个软件实体应当对扩展开放,对修改关闭.也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前 提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为.  


满足OCP的设计给系统带来两个无可比拟的优越性.   


1.通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性.  


2.已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值