zoukankan      html  css  js  c++  java
  • 创建型模式--工厂方法模式

     概述
        定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
    
     适用性
        1.当一个类不知道它所必须创建的对象的类的时候。
    
        2.当一个类希望由它的子类来指定它所创建的对象的时候。

    3.当类将创建对象的职责托付给多个帮助子类中的某一个。而且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

     參与者
        1.Product
          定义工厂方法所创建的对象的接口。

    2.ConcreteProduct 实现Product接口。 3.Creator 声明工厂方法,该方法返回一个Product类型的对象。

    Creator也能够定义一个工厂方法的缺省实现。它返回一个缺省的ConcreteProduct对象。 能够调用工厂方法以创建一个Product对象。

    4.ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例。


    类图:
                    

    代码描写叙述:
    /**
     * 定义工厂方法所创建的对象的接口。

    * @author Linhai Gu * */ public interface IWork { void doWork(); }



    <strong><span style="font-size:18px;">/**
     * 实现IWork接口。
     * @author Linhai Gu
     *
     */
    public class CoderWork implements IWork{
    
    	@Override
    	public void doWork() {
    		// TODO Auto-generated method stub
    		System.out.println("程序猿拼命写完代码,并提交项目!

    "); } }</span></strong>




    <strong><span style="font-size:18px;">/**
     * 实现IWork接口。
     * @author Linhai Gu
     *
     */
    public class ManagerWork implements IWork{
    
    	@Override
    	public void doWork() {
    		// TODO Auto-generated method stub
    		System.out.println("项目经理审核项目并上线!");
    	}
    
    }</span></strong>




    <strong><span style="font-size:18px;">/**
     * 声明工厂方法,该方法返回一个IWork类型的对象。
     * 能够调用工厂方法以创建一个IWork对象。
     * @author Linhai Gu
     *
     */
    public interface IWorkFactory {
    	IWork getWork();
    }</span></strong>



    <strong><span style="font-size:18px;">/**
     * 重定义工厂方法以返回一个详细实例。

    * @author Linhai Gu * */ public class CoderWorkFactory implements IWorkFactory{ @Override public IWork getWork() { // TODO Auto-generated method stub return new CoderWork(); } } </span></strong>




    <strong><span style="font-size:18px;">/**
     * 重定义工厂方法以返回一个详细实例。
     * @author Linhai Gu
     *
     */
    public class ManagerWorkFactory implements IWorkFactory{
    
    	@Override
    	public IWork getWork() {
    		// TODO Auto-generated method stub
    		return new ManagerWork();
    	}
    
    }</span></strong>



    <strong><span style="font-size:18px;">/**
     * 測试
     * @author Linhai Gu
     *
     */
    public class MainTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		CoderWorkFactory coderWorkFactory=new CoderWorkFactory();
    		ManagerWorkFactory managerWorkFactory=new ManagerWorkFactory();
    		coderWorkFactory.getWork().doWork();
    		managerWorkFactory.getWork().doWork();
    	}
    
    }</span></strong>

    执行结果:

                                                                                                        







  • 相关阅读:
    如何给wordpress外部链接自动添加nofollow
    wordpress如何批量关闭旧日志留言功能
    如何一次把所有wordpress插件都禁用了
    sql批量获取wordpress所有留言者的邮件地址
    wordpress数据库优化-关闭日志修订
    wordpress数据库优化wp_posts表 OPTIMIZE
    sql批量删除wordpress所有日志修订revision
    sql删除wordpress没用的postmeta记录
    wordpress如何删除没有文章的tags标签
    批量删除wordpress垃圾评论留言
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6925923.html
Copyright © 2011-2022 走看看