• 创建型模式--工厂方法模式


     概述
        定义一个用于创建对象的接口,让子类决定实例化哪一个类。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>

    执行结果:

                                                                                                        







  • 相关阅读:
    Codeforces Round #365 (Div. 2) D
    Codeforces Round #414 C. Naming Company
    Codeforces Round #365 (Div. 2) B
    LA 6893 The Big Painting(矩阵Hash)
    Gym100783C Golf Bot(FFT)
    POJ 2481 Cows(树状数组)
    POJ 2352 Stars
    POJ 2299 Ultra-QuickSort(树状数组+离散化)
    LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)
    LightOJ 1356 Prime Independence(质因数分解+最大独立集+Hopcroft-Carp)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6925923.html
Copyright © 2020-2023  润新知