《第十讲:设计模式与用户界面设计.ppt》由会员分享,可在线阅读,更多相关《第十讲:设计模式与用户界面设计.ppt(139页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软 件 工 程 导 论刘春刘春计算机与信息工程学院计算机与信息工程学院 软件工程系软件工程系两种软件开发方法结构化结构化方法方法面向对面向对象方法象方法3 3回顾p面向对象设计方法概述面向对象设计方法概述p系统设计系统设计软件体系结构设计软件体系结构设计硬件体系结构设计硬件体系结构设计p详细设计详细设计对象设计对象设计对象持久化设计对象持久化设计p面向对象的设计原则面向对象的设计原则p设计模式设计模式p将信息系统中比较关心的对象分层,可分为三层:将信息系统中比较关心的对象分层,可分为三层:用户界面用户界面层层、业务层业务层、数据访问层数据访问层,p再把各层中的一些公共部分提出来:再把各层中的一
2、些公共部分提出来:权限管理权限管理、异常处理异常处理,这样得到包图如下:这样得到包图如下:软件体系结构的设计:以信息系统为例用户界面层的职责是:用户界面层的职责是:u与用户的交互,接收用户的各种输入以及输出各种提示信息或处理结果。u对于输入的数据进行数据校验,过滤非法数据。u向业务处理对象发送处理请求。1、用户界面层2、业务处理包 业务处理层的职责是:业务处理层的职责是:u实现各种业务处理逻辑业务处理逻辑或处理算法处理算法。u验证请求者的权限。u向数据访问对象发送数据持久化操作的请求。u向用户界面层返回处理结果。3、数据访问包 数据访问层的职责是:数据访问层的职责是:u实现数据的持久化操作u实
3、现事务处理 权限管理的主要职责是:权限管理的主要职责是:u验证请求者的请求权限u提供请求者的权限列表 注:业务处理对象通过权注:业务处理对象通过权限管理对象来验证权限限管理对象来验证权限 4、权限管理包 5、异常处理包 异常处理的职责:异常处理的职责:u汇报运行时的详细异常信息u记录异常处理日志6、信息系统的体系结构的类图 p硬件系统体系结构模型硬件系统体系结构模型显示硬件的结构,包括不显示硬件的结构,包括不同的节点和这些节点之间如何连接同的节点和这些节点之间如何连接硬件体系结构设计1212内容提纲p面向对象设计方法概述面向对象设计方法概述p系统设计系统设计软件体系结构设计软件体系结构设计硬件
4、体系结构设计硬件体系结构设计p详细设计详细设计对象设计对象设计对象持久化设计对象持久化设计p面向对象的设计原则面向对象的设计原则p设计模式设计模式p主要包括主要包括对象设计对象设计和和对象持久化设计(数据库设计)对象持久化设计(数据库设计)p对象设计:对象设计:对象接口设计对象接口设计:确定对象的主要职责(对象倒底应该做什么):确定对象的主要职责(对象倒底应该做什么)属性和操作的设计属性和操作的设计:设计属性的数据结构、类型,以及操作的算:设计属性的数据结构、类型,以及操作的算法、参数类型、返回值等法、参数类型、返回值等p对象持久化设计对象持久化设计:数据对象的存储和检索数据对象的存储和检索详
5、细设计p永久类的存储设计永久类的存储设计永久类一般都是实体类,对应的是系统中涉及的数据永久类一般都是实体类,对应的是系统中涉及的数据每一个永久类映射为一个关系表,表格的列或字段对应类的每一个永久类映射为一个关系表,表格的列或字段对应类的属性,而行或记录对应类的实例(对象)属性,而行或记录对应类的实例(对象)p关联的存储设计关联的存储设计 1:1关联:在一个类对应的表中用外键隐含管理关联:在一个类对应的表中用外键隐含管理 1:n关联:在关联:在n端类对应的表中用外键隐含关联端类对应的表中用外键隐含关联 n:n关联:转换成关联:转换成1:n管理,然后按照上面的方法进行转换管理,然后按照上面的方法进
6、行转换基于关系数据库的对象持久化设计1:1关联1:n关联1717内容提纲p面向对象设计方法概述面向对象设计方法概述p系统设计系统设计软件体系结构设计软件体系结构设计硬件体系结构设计硬件体系结构设计p详细设计详细设计对象设计对象设计对象持久化设计对象持久化设计p面向对象的设计原则面向对象的设计原则p设计模式设计模式p单一职责原则单一职责原则p开放开放-封闭原则封闭原则p接口隔离原则接口隔离原则pLiskov替换原则替换原则p依赖倒置原则依赖倒置原则面向对象设计原则p一个类只完成某一类功能一个类只完成某一类功能(职责职责)p尽可能避免出现一个尽可能避免出现一个“复合复合”功能的类功能的类在同一个类
7、中完在同一个类中完成多个不同的功能成多个不同的功能1、单一职责原则p开放开放 封闭原则:封闭原则:软件实体类(类、模块、函数等)应该是可以扩展、但是不可修改的p基本思想:基本思想:不用修改原有类就能扩展一个类的行为2、开放封闭原则什么是不封闭、不开放p如下的模型可以处理月薪制和时薪制职工工资,如果还要增加一如下的模型可以处理月薪制和时薪制职工工资,如果还要增加一种职工类型,其计酬方式不同(如提成制),则必定要修改种职工类型,其计酬方式不同(如提成制),则必定要修改Employee类类如何改进p利用抽象机制利用抽象机制封闭封闭:Employee及其子类是封闭的开放开放:可以派生新的子类,实现新的
8、需求pLiskov 替换原则:替换原则:子类应当可以替换父类并出现在父类能够出现的任何地方p核心思想:核心思想:子类型必须能够替换它们的基类型,该原则能够知道设计人员正确地进行类的继承与派生3、Liskov 替换原则一个违反Liskov原则的例子p正方形是长方形的一种特例正方形是长方形的一种特例p正方形有独特的行为方式正方形有独特的行为方式p通过覆盖父类的有关方法来实现子类行为通过覆盖父类的有关方法来实现子类行为实际中的使用情况p长方形的使用者按照长方形的特点来调用SetWidth和SetHeight两个函数,并测试面积,代码如下:void testArea(Rectangle&r)r.Set
9、Width(5);r.SetHeight(4);assert(r.Area()=20);p如果传递进来的是Square对象又会如何呢?显然会出现断言错误,测试失败。p对于客户程序来说,模型中的层次结构是脆弱的,因为违反了LSP替换原则,Square对象和Rectangle对象的行为方式不相容4、接口隔离原则p接口隔离原则:接口隔离原则:采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口更好。p对接口的污染对接口的污染设计人员为了节省接口数目,而经常将一些功能相近或功能相关的接口合并成一个总的接口臃肿的大接口p面向过程面向过程自顶向下,逐步求精,形成上对下依赖p依赖倒置原则:依
10、赖倒置原则:应用系统中的高层模块不应依赖于底层模块;抽象不应该依赖于细节实现,实现细节应该依赖于抽象。p优点:优点:复用、灵活性、易维护5、依赖倒置原则3232内容提纲p面向对象设计方法概述面向对象设计方法概述p系统设计系统设计软件体系结构设计软件体系结构设计硬件体系结构设计硬件体系结构设计p详细设计详细设计对象设计对象设计对象持久化设计对象持久化设计p面向对象的设计原则面向对象的设计原则p设计模式设计模式3333第十一章设计模式与用户界面设计3434内容提纲p设计模式概述设计模式概述p经典设计模式介绍经典设计模式介绍p用户界面设计用户界面设计什么是设计模式?设计模式:设计模式:描述一个在我们
11、周围不断描述一个在我们周围不断重复发生的问题,以及该问题的解决方重复发生的问题,以及该问题的解决方案。案。使用设计模式,我们就能一次一次地利用已有方案而不必使用设计模式,我们就能一次一次地利用已有方案而不必做重复劳动。做重复劳动。设计模式的起源 p软件设计模式起源于建筑学软件设计模式起源于建筑学p1977年,建筑大师年,建筑大师Alexander出版了出版了A Pattern Language:Towns,Building,Construction一一书书p受受Alexander的影响的影响,Kent Beck和和Ward Cunningham在在1987年举行的一次面向对象的会年举行的一次面
12、向对象的会议上发表了论文:议上发表了论文:在面向对象编程中使用模式在面向对象编程中使用模式设计模式的四个基本要素p模式名称模式名称一个助记名一个助记名,用几个词来描述模式的问题、解决方案和效果。p问题问题描述了应该在何时使用模式描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果。有时候,问题部分会包括使用模式必须满足的一系列先决条件。p解决方案解决方案描述了设计的组成成分描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组
13、合(类或对象组合)来解决这个问题。p效果效果描述了模式应用的效果及使用模式应权衡的问题。比如模式的使用对系统的灵活性、扩充性或可移植性的影响。为什么学习设计模式?p学习设计模式不仅可以使我们学习设计模式不仅可以使我们使用好这些成功的使用好这些成功的模式模式,利用已有的设计经验,利用已有的设计经验p更重要的是可以使我们更重要的是可以使我们更加深刻地理解面向对象更加深刻地理解面向对象的设计思想的设计思想,非常有利于我们更好地使用面向对,非常有利于我们更好地使用面向对象语言解决设计中的问题。象语言解决设计中的问题。设计模式之四人帮(GOF)p GOF:Gang of FourErich Gamma、
14、Richard Helm、Ralph Johnson、John Vlissides)GOF之书pGOF之书之书:Design Patterns:Elements of Reusable Object-Oriented Software(设计模式:可复用的面向设计模式:可复用的面向对象软件的基本原理对象软件的基本原理)。)。p该书被广大喜爱者昵称为该书被广大喜爱者昵称为GOF之书,被认为是学习设计模式之书,被认为是学习设计模式的必读著作,的必读著作,GOF之书已经被公认为是之书已经被公认为是设计模式领域的奠基设计模式领域的奠基之作之作。GOF之23种设计模式p创建型模式创建型模式1.1.抽象工厂
15、模式抽象工厂模式2.2.工厂方法模式工厂方法模式 3.3.单例模式单例模式4.4.建造者模式建造者模式 5.5.原型模式原型模式 p结构型结构型模式模式1.1.适配器模式适配器模式2.2.外观模式外观模式 3.3.桥接模式桥接模式 4.4.组合模式组合模式5.5.装饰模式装饰模式6.6.享元模式享元模式7.7.代理模式代理模式p行为型模式行为型模式1.1.迭代器模式迭代器模式2.2.观察者模式观察者模式3.3.策略模式策略模式4.4.职责链模式职责链模式5.5.命令模式命令模式 6.6.解释器模式解释器模式7.7.中介者模式中介者模式8.8.备忘录模式备忘录模式9.9.状态模式状态模式10.1
16、0.模板方法模式模板方法模式11.11.访问者模式访问者模式p创建型模式关注的是如何创建型模式关注的是如何创建对象而不是直接实例化对象创建对象而不是直接实例化对象,这会使程序在判断给定情况下创建哪一个对象时更为灵活这会使程序在判断给定情况下创建哪一个对象时更为灵活p五五种创建型模式种创建型模式1.抽象工厂模式2.工厂方法模式 3.单例模式4.建造者模式 5.原型模式 创建型模式p结构型模式关注的是如何结构型模式关注的是如何将一组对象组合成更大的结构将一组对象组合成更大的结构p七七种创建型模式种创建型模式1.适配器模式2.外观模式 3.桥接模式 4.组合模式5.装饰模式6.享元模式7.代理模式结
17、构型模式p行为行为型模式关注的是如何型模式关注的是如何定义系统内对像间的通信,以及定义系统内对像间的通信,以及复杂程序中的流程控制复杂程序中的流程控制p十一十一种创建型模式种创建型模式1.迭代器模式2.观察者模式3.策略模式4.职责链模式5.命令模式 6.解释器模式行为型模式7.中介者模式8.备忘录模式9.状态模式10.模板方法模式11.访问者模式4545内容提纲p设计模式概述设计模式概述p经典设计模式介绍经典设计模式介绍p用户界面设计用户界面设计经典设计模式介绍p创建型模式创建型模式1.1.抽象工厂模式抽象工厂模式2.2.工厂方法模式工厂方法模式 3.3.单例模式单例模式4.4.建造者模式建
18、造者模式 5.5.原型模式原型模式 p结构型结构型模式模式1.1.适配器模式适配器模式2.2.外观模式外观模式 3.3.桥接模式桥接模式 4.4.组合模式组合模式5.5.装饰模式装饰模式6.6.享元模式享元模式7.7.代理模式代理模式p行为型模式行为型模式1.1.迭代器模式迭代器模式2.2.观察者模式观察者模式3.3.策略模式策略模式4.4.命令模式命令模式 5.5.职责链模式职责链模式6.6.解释器模式解释器模式7.7.中介者模式中介者模式8.8.备忘录模式备忘录模式9.9.状态模式状态模式10.10.模板方法模式模板方法模式11.11.访问者模式访问者模式参考:清华大学耿祥义参考:清华大学
19、耿祥义JAVAJAVA设计模式的课件设计模式的课件经典设计模式:抽象工厂模式p抽象工厂抽象工厂模式:模式:提供一个创建一系列(相互依赖)对象的接口,而无需指定它们具体的类。p应用背景应用背景:当系统准备为用户提供一系列相关的对象,又不想让用户代码和创建这些对象的类形成耦合不想让用户代码和创建这些对象的类形成耦合时,就可以使用抽象工厂方法模式来设计系统。p抽象工厂模式的关键抽象工厂模式的关键:是在一个抽象类抽象类或接口接口中定义若干个抽象方法抽象方法,这些抽象方法分别返回某个类的实例,该抽象类或接口让其子类子类或实现该接口的类实现该接口的类重写这些抽象方法,为用户提供一系列相关的对象。抽象工厂模
20、式的结构p模式的结构中包括模式的结构中包括四种角色四种角色:抽象产品(抽象产品(ProdcutProdcut)具体产品(具体产品(ConcreteProductConcreteProduct)抽象工厂(抽象工厂(AbstractFactoryAbstractFactory)具体工厂(具体工厂(ConcreteFactoryConcreteFactory)抽象工厂模式的UML图抽象工厂模式的应用实例 建立一个系统,该系统可以为用户提供西服套建立一个系统,该系统可以为用户提供西服套装(上衣裤子)和牛仔套装(上衣裤子)。装(上衣裤子)和牛仔套装(上衣裤子)。模式结构中每个部分的描述与使用(1/3)1
21、 1抽象产品(抽象产品(ProductProduct):UpperClothes.javaUpperClothes.javapublic abstract class UpperClothespublic abstract class UpperClothes public abstract int getChestSize();public abstract int getChestSize();public abstract int getHeight();public abstract int getHeight();public abstract String getName();pu
22、blic abstract String getName();Trousers.javaTrousers.javapublic abstract class Trouserspublic abstract class Trousers public abstract int getWaistSize();public abstract int getWaistSize();public abstract int getHeight();public abstract int getHeight();public abstract String getName();public abstract
23、 String getName();模式结构中每个部分的描述与使用(1/3)2 2具体产品(具体产品(ConcreteProduct)_1:ConcreteProduct)_1:WesternUpperClothes.javaWesternUpperClothes.java public class WesternUpperClothes extends UpperClothespublic class WesternUpperClothes extends UpperClothes private int chestSize;private int chestSize;private int
24、 height;private int height;private String name;private String name;WesternUpperClothes(String name,int chestSize,int height)WesternUpperClothes(String name,int chestSize,int height)this.name=name;this.name=name;this.chestSize=chestSize;this.chestSize=chestSize;this.height=height;this.height=height;p
25、ublic int getChestSize()public int getChestSize()return chestSize;return chestSize;public int getHeight()public int getHeight()return height;return height;public String getName()public String getName()return name;return name;模式结构中每个部分的描述与使用(1/3)2 2具体产品(具体产品(ConcreteProduct)_2:ConcreteProduct)_2:Cowb
26、oyUpperClothes.java CowboyUpperClothes.java public class CowboyUpperClothes extends UpperClothespublic class CowboyUpperClothes extends UpperClothes private int chestSize;private int chestSize;private int height;private int height;private String name;private String name;CowboyUpperClothes(String nam
27、e,int chestSize,int height)CowboyUpperClothes(String name,int chestSize,int height)this.name=name;this.name=name;this.chestSize=chestSize;this.chestSize=chestSize;this.height=height;this.height=height;public int getChestSize()public int getChestSize()return chestSize;return chestSize;public int getH
28、eight()public int getHeight()return height;return height;public String getName()public String getName()return name;return name;模式结构中每个部分的描述与使用(1/3)2 2具体产品(具体产品(ConcreteProduct)_3:ConcreteProduct)_3:WesternTrousers.java WesternTrousers.java public class WesternTrousers extends Trouserspublic class We
29、sternTrousers extends Trousers private int waistSize;private int waistSize;private int height;private int height;private String name;private String name;WesternTrousers(String name,int waistSize,int height)WesternTrousers(String name,int waistSize,int height)this.name=name;this.name=name;this.waistS
30、ize=waistSize;this.waistSize=waistSize;this.height=height;this.height=height;public int getWaistSize()public int getWaistSize()return waistSize;return waistSize;public int getHeight()public int getHeight()return height;return height;public String getName()public String getName()return name;return na
31、me;模式结构中每个部分的描述与使用(1/3)2 2具体产品(具体产品(ConcreteProduct)_4:ConcreteProduct)_4:CowboyTrousers.java CowboyTrousers.java public class CowboyTrousers extends Trouserspublic class CowboyTrousers extends Trousers private int waistSize;private int waistSize;private int height;private int height;private String
32、name;private String name;CowboyTrousers(String name,int waistSize,int height)CowboyTrousers(String name,int waistSize,int height)this.name=name;this.name=name;this.waistSize=waistSize;this.waistSize=waistSize;this.height=height;this.height=height;public int getWaistSize()public int getWaistSize()ret
33、urn waistSize;return waistSize;public int getHeight()public int getHeight()return height;return height;public String getName()public String getName()return name;return name;模式结构中每个部分的描述与使用(1/3)3 3抽象工厂(抽象工厂(AbstractFactoryAbstractFactory):ClothesFactory.java ClothesFactory.java public abstract class
34、ClothesFactorypublic abstract class ClothesFactory public abstract UpperClothes createUpperClothes(int chestSize,int height);public abstract UpperClothes createUpperClothes(int chestSize,int height);public abstract Trousers createTrousers(int waistSize,int height);public abstract Trousers createTrou
35、sers(int waistSize,int height);模式结构中每个部分的描述与使用(1/3)4 4具体工厂(具体工厂(ConcreteFactoryConcreteFactory):BeijingClothesFactory.javaBeijingClothesFactory.javapublic class BeijingClothesFactory extends ClothesFactory public class BeijingClothesFactory extends ClothesFactory public UpperClothes createUpperCloth
36、es(int chestSize,int height)public UpperClothes createUpperClothes(int chestSize,int height)return new WesternUpperClothes(return new WesternUpperClothes(北京牌西服上衣北京牌西服上衣,chestSize,height);,chestSize,height);public Trousers createTrousers(int waistSize,int height)public Trousers createTrousers(int wai
37、stSize,int height)return new WesternTrousers(return new WesternTrousers(北京牌西服裤子北京牌西服裤子,waistSize,height);,waistSize,height);ShanghaiClothesFactory.javaShanghaiClothesFactory.javapublic class ShanghaiClothesFactory extends ClothesFactory public class ShanghaiClothesFactory extends ClothesFactory publ
38、ic UpperClothes createUpperClothes(int chestSize,int height)public UpperClothes createUpperClothes(int chestSize,int height)return new WesternUpperClothes(return new WesternUpperClothes(上海牌牛仔上衣上海牌牛仔上衣,chestSize,height);,chestSize,height);public Trousers createTrousers(int waistSize,int height)public
39、 Trousers createTrousers(int waistSize,int height)return new WesternTrousers(return new WesternTrousers(上海牌牛仔裤上海牌牛仔裤,waistSize,height);,waistSize,height);模式结构中每个部分的描述与使用(1/3)5 5应用应用_1:_1:Shop.javaShop.java public class Shoppublic class Shop UpperClothes cloth;UpperClothes cloth;Trousers trouser;Trou
40、sers trouser;public void giveSuit(ClothesFactory factory,int chestSize,int waistSize,int height)public void giveSuit(ClothesFactory factory,int chestSize,int waistSize,int height)cloth=factory.createUpperClothes(chestSize,height);cloth=factory.createUpperClothes(chestSize,height);trouser=factory.cre
41、ateTrousers(waistSize,height);trouser=factory.createTrousers(waistSize,height);showMess();showMess();private void showMess()private void showMess()System.out.println(System.out.println(););System.out.println(cloth.getName()+:);System.out.println(cloth.getName()+:);System.out.print(System.out.print(胸
42、围胸围:+cloth.getChestSize();:+cloth.getChestSize();System.out.println(System.out.println(身高身高:+cloth.getHeight();:+cloth.getHeight();System.out.println(trouser.getName()+:);System.out.println(trouser.getName()+:);System.out.print(System.out.print(腰围腰围:+trouser.getWaistSize();:+trouser.getWaistSize();S
43、ystem.out.println(System.out.println(身高身高:+trouser.getHeight();:+trouser.getHeight();模式结构中每个部分的描述与使用(1/3)5 5应用应用_2:_2:Application.javaApplication.java public class Applicationpublic class Application public static void main(String args)public static void main(String args)Shop shop=new Shop();Shop sh
44、op=new Shop();ClothesFactory factory=new BeijingClothesFactory();ClothesFactory factory=new BeijingClothesFactory();shop.giveSuit(factory,110,82,170);shop.giveSuit(factory,110,82,170);factory=new ShanghaiClothesFactory();factory=new ShanghaiClothesFactory();shop.giveSuit(factory,120,88,180);shop.giv
45、eSuit(factory,120,88,180);抽象工厂的优点p抽象工厂模式可以为用户创建一系列相关的对象,抽象工厂模式可以为用户创建一系列相关的对象,使得用户和创建这些对象的类脱耦。使得用户和创建这些对象的类脱耦。p在在抽象工厂模式中,可以随时增加抽象工厂模式中,可以随时增加“具体工厂具体工厂”为用户提供一组相关的对象。为用户提供一组相关的对象。经典设计模式介绍p创建型模式创建型模式1.1.抽象工厂模式抽象工厂模式2.2.工厂方法模式工厂方法模式 3.3.单例模式单例模式4.4.建造者模式建造者模式 5.5.原型模式原型模式 p结构型结构型模式模式1.1.适配器模式适配器模式2.2.外观
46、模式外观模式 3.3.桥接模式桥接模式 4.4.组合模式组合模式5.5.装饰模式装饰模式6.6.享元模式享元模式7.7.代理模式代理模式p行为型模式行为型模式1.1.迭代器模式迭代器模式2.2.观察者模式观察者模式3.3.策略模式策略模式4.4.命令模式命令模式 5.5.职责链模式职责链模式6.6.解释器模式解释器模式7.7.中介者模式中介者模式8.8.备忘录模式备忘录模式9.9.状态模式状态模式10.10.模板方法模式模板方法模式11.11.访问者模式访问者模式经典设计模式:工厂方法模式p工厂方法模式:工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例
47、化延迟到其子类p应用背景应用背景:当系统准备为用户提供某个类的子类的实例提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统p抽象抽象工厂模式的关键工厂模式的关键:是在一个接口或抽象类中定义一个抽象方法抽象方法,该方法返回某个类的子类的实例该方法返回某个类的子类的实例,该抽象类或接口让其子类或实现该接口的类通过重写这个抽象方法返回某个子类的实例 工厂方法模式的结构p模式的结构中包括模式的结构中包括四种角色四种角色:抽象产品(抽象产品(ProdcutProdcut)具体产品(具体产品(ConcreteProductConcr
48、eteProduct)构造者(构造者(CreatorCreator)具体构造者(具体构造者(ConcreteCreatorConcreteCreator)工厂方法模式的UML图工厂方法模式的应用实例 假设有三个笔芯,分别是红笔芯、蓝笔芯和假设有三个笔芯,分别是红笔芯、蓝笔芯和黑笔芯。用户希望通过圆珠笔来明确笔芯的颜色。黑笔芯。用户希望通过圆珠笔来明确笔芯的颜色。模式结构中每个部分的描述与使用(1/3)1 1抽象产品(抽象产品(ProductProduct):PenCore.java PenCore.java public abstract class PenCorepublic abstrac
49、t class PenCore String color;String color;public abstract void writeWord(String s);public abstract void writeWord(String s);模式结构中每个部分的描述与使用(2/3)2 2具体产品(具体产品(ConcreteProductConcreteProduct)_1:_1:RedPenCore.java RedPenCore.java public class RedPenCore extends PenCorepublic class RedPenCore extends Pen
50、Core RedPenCore()RedPenCore()color=color=红色红色;public void writeWord(String s)public void writeWord(String s)System.out.println(System.out.println(写出写出+color+color+的字的字:+s);:+s);模式结构中每个部分的描述与使用(3/3)2 2具体产品(具体产品(ConcreteProductConcreteProduct)_2:_2:BluePenCore.java BluePenCore.java public class BluePe