抽象工厂模式

来源:互联网 发布:淘宝店铺封店重开技巧 编辑:程序博客网 时间:2024/06/10 19:34

基本概念

1、interface中定义的方法访问权限自动被声明为public,也只能为public。

2、抽象类可以不用实现接口中的方法

3、一个子类只能存在一个父类,但可以实现多个接口

4、抽象类中可以拥有自己的成员变量和非抽象的方法,接口中只能存在常量和抽象方法。

5、spring框架采用工厂模式,其实就是bean工厂。


门的例子:
Door具备两个行为:open()和close(),用抽象类和接口没什么区别,但如果需要一个报警的功能,最好就是分开了
理解方式:AlarmDoor首先是Door,同时有报警功能,如果一个行为比较模糊,就设计为接口
abstract Class Door{void open();void close();}interface Alarm{void alarm();}Class AlarmDoor extends Door implements Alarm{void open(){}void close(){}void alarm(){}}


抽象类是"is-a"关系,接口是"like-a"关系,通过接口与抽象类实现多态。

抽象工厂模式

普通工厂针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。普通工厂如果扩展产品,需要在产品维度上扩展产品和产品工厂,每个产品对应一个产品工厂,导致工厂泛滥。。

抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。应对产品族概念而生,增加新的产品线很容易,但是如果要增加新的产品却很难。

参考:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html

应用

public class UserTask extends AbstractLoanTask {    private Logger logger = Logger.getLogger(UserTask.class);    public UserTask() {        super();        task.setName("User.Task");    }    @Override    public void doSomething() {logger.debug("--------userTask executing----------");    }   }
public class NoticeTask extends AbstractLoanTask {private Logger logger = Logger.getLogger(NoticeTask.class);public NoticeTask() {super();task.setName("NoticeTask");}@Overridepublic void doSomething() {logger.debug("--------userTask executing----------");}}
public interface LoanTask {/** * 发送消息使用 */ static String MESSAGE_STATUS = "MESSAGE_STATUS";/** * 用户相关业务使用:开户,绑定银行卡等 */ static String USER_STATUS = "USER_STATUS"; void doSomething();}
public class AbstractLoanTask implements LoanTask {private Logger logger = Logger.getLogger(AbstractLoanTask.class);public Thread task = new Thread("Task") {private boolean isRun = true;@Overridepublic void run() {while (isRun) {logger.debug(this.getName() + " Running!");doLoan();}}public void stopThread() {isRun = false;}};public AbstractLoanTask() {task.start();logger.debug("线程启动!");}@Overridepublic void doSomething() {logger.debug("AbstractTask开始");}}





0 0
原创粉丝点击