为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式Day01

标签:
Android

一、工厂模式

1、工厂模式的关键点就是如何描述好这两个角色之间的关系,分为四种情况:

       (1)单一产品系,工厂生产一种类型的产品;

       (2)多产品系,特征相同。工厂生产多种类型的产品;

       (3)多产品系,部分特征相同;

       (4)多产品系,无特征相同。

       工厂模式一般分为简单工厂、工厂、抽象工厂3种情况,属于创建型设计模式。

2、简单工厂设计模式

       (1)定制抽象产品接口;

       (2)定制具体产品子类;

       (3)定制工厂类,简单工厂类的特点:它是一个具体的类,非接口或抽象类。其中有一个重要的create()方法,利用if...else或switch开关创建所需产品,并返回。

[代码]java代码:

?

1

2

3

4

5

package com.example.demo6;

//定义小汽车接口

public interface ICar {

    //由于工厂模式仅关系对象的创建,为说明方便,无需定义方法

}

[代码]java代码:

?

1

2

3

4

5

package com.example.demo6;

//高档小汽车

public class TopCar implements ICar {

 

}

[代码]java代码:

?

1

2

3

4

5

package com.example.demo6;

//中档小汽车

public class MidCar implements ICar {

 

}

[代码]java代码:

?

1

2

3

4

5

package com.example.demo6;

//低档小汽车

public class LowCar implements ICar {

 

}

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

package com.example.demo6;

//简单工厂

public class CarSimpleFactory {

    public static final String   TOPTYPE="toptype";

    public static final String   MIDTYPE="midtype";

    public static final String   LOWTYPE="lowtype";

    public static ICar   create(String mark){

        ICar   obj=null;

        if(mark.equals(TOPTYPE)){    //如果是高档类型

            obj=new   TopCar();       //则创建高档车对象

        }else if(mark.equals(MIDTYPE)){

            obj=new   MidCar();

        }else if(mark.equals(LOWTYPE)){

            obj=new   LowCar();

        }

        return obj;           //返回选择的对象

    }

}

[代码]java代码:

?

1

2

3

4

5

6

7

8

package com.example.demo6;

//测试程序

public class CarTest {

    public static void main(String[]   args) {

        //从工厂中创建对象

        ICar   obj=CarSimpleFactory.create("toptype");

    }

}

 

3、工厂模式

       (1)定制抽象产品接口;

       (2)定制具体产品子类;

       (3)定制抽象工厂类(或接口),其中有一个重要的create()抽象方法;

       (4)定制具体工厂子类。

[代码]java代码:

?

1

2

3

4

5

package com.example.demo8;

//定义小汽车接口

public interface ICar {

 

}

[代码]java代码:

?

1

2

3

4

5

package com.example.demo8;

//高档小汽车

public class TopCar implements ICar {

 

}

[代码]java代码:

?

1

2

3

4

5

package com.example.demo8;

//中档小汽车

public class MidCar implements ICar {

 

}

[代码]java代码:

?

1

2

3

4

5

package com.example.demo8;

//低档小汽车

public class LowCar implements ICar {

 

}

[代码]java代码:

?

1

2

3

4

5

package com.example.demo8;

//定义抽象工厂

public abstract class AbstractFactory {

    public abstract ICar create();

}

[代码]java

?

01

02

03

04

05

06

07

08

09

10

package com.example.demo8;

//定义高档小汽车工厂

public class TopFactory extends AbstractFactory {

 

    @Override

    public ICar create() {

        return new   TopCar();//高档工厂生成高档小气车对象

    }

 

}

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

package com.example.demo8;

//定义中档小汽车工厂

public class MidFactory extends AbstractFactory {

 

    @Override

    public ICar create() {

        return new   LowCar();//低档工厂生成低档小汽车对象

    }

 

}

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

package com.example.demo8;

//定义低档小汽车工厂

public class LowFactory extends AbstractFactory {

 

    @Override

    public ICar create() {

        return new   MidCar();//低档工厂生成中档小汽车

    }

 

}

[代码]java代码:

?

1

2

3

4

5

6

7

8

package com.example.demo8;

//测试类

public class CarTest {

    public static void main(String[]   args) {

        AbstractFactory   obj=new TopFactory();//多态创建高档工厂

        ICar   car=obj.create();      //获得高档工厂中的小汽车对象

    }

}

 

4、工厂与简单工厂模式的区别。

       (1)工厂模式把简单工厂中具体的工厂类划分为两层:抽象工厂层+具体工厂子类层。抽象工厂层的划分丰富了程序框架的内涵,符合从一般到特殊的语义特点。

       (2)create()方法参数的理解:在简单工厂中,create(String mark)是成员方法,表明在该方法中管理多个产品,根据mark的值产生并返回ICar对象;在工厂模式中,create()是抽象方法,无参数,表明在具体的子类工厂中创建某个具体的产品。

       (3)工厂方法更易于软件的二次开发及维护,主要特征是:当需求分析变化时,只需要增加、删除相应的类,而不是修改已有的类。

5、抽象工厂

       (1)定制抽象产品接口;

       (2)定制具体产品类子类;

       (3)定制抽象工厂类(或接口),其中有两个重要的create()抽象方法;

       (4)定制具体工厂子类,每个工厂子类中重写create()方法。

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义小汽车接口

public interface ICar {}

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义高档小汽车类

public class TopCar implements ICar {}

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义中档小汽车类

public class MidCar implements ICar {}

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义低档小汽车类

public class LowCar implements ICar {}

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义公共汽车接口

public interface IBus {}

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义高档公共汽车类

public class UpBus implements IBus {}

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义中档公共汽车类

public class MidBus implements IBus {}

[代码]java代码:

?

1

2

3

package com.example.demo9;

//定义低档公共汽车类

public class DnBus implements IBus {}

[代码]java代码:

?

1

2

3

4

5

6

package com.example.demo9;

//定义抽象工厂

public abstract class AbstractFactory {

    public abstract ICar   createCar();//产生小汽车对象

    public abstract IBus   createBus();//产生公共汽车对象

}

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

package com.example.demo9;

//定义高档工厂

public class TopFactory extends AbstractFactory {

 

    @Override

    public ICar createCar() {

        return new   TopCar();//高档工厂生成高档小汽车对象

    }

 

    @Override

    public IBus createBus() {

        return new   UpBus();//高档工厂生成高档公共汽车对象

    }

 

}

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

package com.example.demo9;

//定义中档工厂

public class MidFactory extends AbstractFactory {

 

    @Override

    public ICar createCar() {

        return new   MidCar();//中档工厂生成中档小汽车

    }

 

    @Override

    public IBus createBus() {

        return new   MidBus();//中档工厂生成中档公共汽车

    }

 

}

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

package com.example.demo9;

//定义低档工厂

public class LowFactory extends AbstractFactory {

 

    @Override

    public ICar createCar() {

        return new   LowCar();//低档工厂生成低档小汽车对象

    }

 

    @Override

    public IBus createBus() {

        return new   DnBus();//低档工厂生成低档公共汽车对象

    }

 

}

原文链接:http://www.apkbus.com/blog-815579-61002.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消