JAVA花园布局(抽象工厂模式)

实现抽象工厂模式的技术要点如下:

· 抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是这三种模式中最为抽象、最具一般性的。

· 使用抽象工厂模式需要满足以下条件:系统中有多个产品族,而系统一次只可能消费其中一族产品;同属于同一个产品族的产品。

· 抽象工厂模式的组成部分与工厂方法模式的组成部分相同

 package JAVA_Project_01_05;

/*
实现抽象工厂模式的技术要点如下:

· 抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是这三种模式中最为抽象、最具一般性的。

· 使用抽象工厂模式需要满足以下条件:系统中有多个产品族,而系统一次只可能消费其中一族产品;同属于同一个产品族的产品。

· 抽象工厂模式的组成部分与工厂方法模式的组成部分相同
 */

class Plant {//植物

        String name;//植物名称

        public Plant(String name) {//带参数的构造方法

                this.name = name;

        }

        public String getName() {

                return name;

        }

        public void setName(String name) {

                this.name = name;

        }

}

abstract class Garden {//花园类

        public abstract Plant getShade();//花台上的植物

        public abstract Plant getCenter();//中间的植物

        public abstract Plant getBorder();//边上的植物

}

class Elegant extends Garden {//典雅型

        public Plant getBorder() {

                return new Plant("兰草");

        }

        public Plant getCenter() {

                return new Plant("榕树");

        }

        public Plant getShade() {

                return new Plant("郁金香");

        }

}

class Practical extends Garden//实用型

{

        public Plant getShade() {

                return new Plant("葡萄");

        }

        public Plant getCenter() {

                return new Plant("石榴");

        }

        public Plant getBorder() {

                return new Plant("丝瓜");

        }

}
class Lazy extends Garden//懒人型

{

        public Plant getShade() {

                return new Plant("月季");

        }

        public Plant getCenter() {

                return new Plant("茶花");

        }

        public Plant getBorder() {

                return new Plant("竹");

        }

}

class GardenMaker {//抽象工厂类

        private static Garden garden;

        public static Garden getGarden(String type) {

                garden = new Elegant();//默认情况

                if (type.equals("实用型"))

                        garden = new Practical();

                if (type.equals("懒人型"))

                        garden = new Lazy();

                return garden;

        }

}

public class TextAbstractFactory {//操作抽象工厂模式的类

        public static void main(String[] args) {//Java程序主入口处

                Garden garden = GardenMaker.getGarden("实用型");//传入参数调用方法获得实例

                Plant shade = garden.getShade();//获取花园植物

                Plant center = garden.getCenter();

                Plant border = garden.getBorder();

                System.out.println("花台上的植物:" + shade.getName());

                System.out.println("中间的植物:" + center.getName());

                System.out.println("边上的植物:" + border.getName());

        }

}

/*
(1)程序中定义一个植物类、一个花园的抽象类、三个不同花园的抽象类的实现类以及一个抽象工厂类。程序中使用抽象工厂类实现对不同花园的选择。
使用这样模式能够将实现类和它们的生成过程完全分割开来。实现类被隐藏在工厂类中,调用者不必知道实现类的任何信息。
(2)虽然抽象工厂中的子类继承了同一个超类,但是它们也可以拥有与其他子类不同的方法。
 */


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值