设计模式
文章平均质量分 72
chengqiuming
这个作者很懒,什么都没留下…
展开
-
解释模式
一 点睛如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。// 用于两个整数相加public static int add(int a,int b){ return a + b;}// 用于两个整数相加public static int add(int a,int b,int c){ return a + b + c;}// 用于n个整数相加public static int add(Integer ... arr) {原创 2021-02-21 20:16:21 · 638 阅读 · 0 评论 -
备忘录模式
一 点睛备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;浏览器中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。定义又叫快照模式,在不破坏封装性的前提下,原创 2021-02-20 16:13:53 · 320 阅读 · 2 评论 -
访问者模式
一 点睛定义封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。二 结构访问者模式包含以下主要角色:抽象访问者(Visitor)角色:定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素类个数(Element的实现类个数)是一样的,从这点不难看出,访问者模式要求元素类的个数不能改变。具体访问者(ConcreteVisitor)角色:给出对每一个元素类访问时所产生的具体行为。抽象元素(E原创 2021-02-20 15:16:14 · 471 阅读 · 0 评论 -
迭代器模式
一 点睛定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。二 结构迭代器模式主要包含以下角色:抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法。具体迭代器(Concretelterator)角色:实现原创 2021-02-20 14:07:22 · 193 阅读 · 0 评论 -
中介者模式
一 点睛一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类本身,以及中介者,这样就减小了系统的耦合。一个好的设计,必定不会原创 2021-02-20 11:27:05 · 438 阅读 · 0 评论 -
观察者模式
一 点睛定义又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。二 结构在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存原创 2021-02-20 10:59:52 · 317 阅读 · 0 评论 -
状态模式
一 不使用状态模式1 需求通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。2 类图3 代码public interface ILift { // 电梯的4个状态 // 开门状态 public final static int OPENING_STATE = 1; // 关门状态原创 2021-02-19 20:08:12 · 220 阅读 · 0 评论 -
责任链模式
一 点睛在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。定义:又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成原创 2021-02-18 19:37:49 · 210 阅读 · 0 评论 -
命令模式
一 点睛日常生活中,我们出去吃饭都会遇到下面的场景。定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。二 结构命令模式包含以下主要角色:抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。具体命令(Concrete Command)角色:具体的命令,实现命令接口;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。实现者/接收者(Receiver)角色:原创 2021-02-16 19:12:23 · 692 阅读 · 0 评论 -
策略模式
一 点睛先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行原创 2021-02-13 19:12:46 · 429 阅读 · 0 评论 -
模板方法模式
一 点睛在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。定义:定义一个操作中的算法骨架,而将算法的一些步骤原创 2021-02-11 20:14:48 · 320 阅读 · 0 评论 -
享元模式
一 点睛运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。二 结构享元(Flyweight )模式中存在以下两种状态:内部状态,即不会随着环境的改变而改变的可共享部分。外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。享元模式的主要有以下角色:抽象享元角色(Flyweight):通常是一个接口或抽象类,在抽象享元类中声明了原创 2021-02-10 19:33:49 · 213 阅读 · 0 评论 -
组合模式
一 概述上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要的麻烦,作为客户而已,它始终希望能够一致的对待容器对象和叶子对象。定义:又名部分整体模式,是用于原创 2021-02-09 20:14:23 · 332 阅读 · 0 评论 -
外观模式
一 点睛有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。定义又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部原创 2021-02-08 19:50:54 · 346 阅读 · 0 评论 -
桥接模式
一 概述现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。定义:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变原创 2021-02-07 20:21:04 · 409 阅读 · 0 评论 -
装饰者模式
一 点睛我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。使用继承的方式存在的问题:扩展性不好如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子类。产生过多的子类定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功原创 2021-02-05 20:56:27 · 421 阅读 · 0 评论 -
对象适配器
一 点睛实现方式:对象适配器模式可釆用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。二 需求读卡器:使用对象适配器模式将读卡器的案例进行改写。三 类图四 代码在类适配器模式的代码的基础上,我们只需要修改适配器类(SDAdapterTF)和测试类。// 创建适配器对象(SD兼容TF)public class SDAdapterTF implements SDCard { private TFCard tfCard; public SDAda原创 2021-02-05 20:37:53 · 936 阅读 · 0 评论 -
适配器模式
一 点睛如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。1 定义将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模原创 2021-02-03 20:46:44 · 415 阅读 · 0 评论 -
CGLIB动态代理
一 说明使用火车站卖票,使用CGLIB代理实现。如果没有定义SellTickets接口,只定义了TrainStation(火车站类)。很显然JDK代理是无法使用了,因为JDK动态代理要求必须定义接口,对接口进行代理。CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。二 代码CGLIB是第三方提供的包,所以需要引入jar包的坐标:<dependency> <groupId>cglib</groupI原创 2021-02-03 20:04:52 · 267 阅读 · 0 评论 -
JDK动态代理
一 点睛接下来我们使用动态代理实现卖火车票,先说说JDK提供的动态代理。Java中提供了一个动态代理类Proxy,Proxy并不是我们上述所说的代理对象的类,而是提供了一个创建代理对象的静态方法(newProxyInstance方法)来获取代理对象。二 代码//卖票接口public interface SellTickets { void sell();}//火车站 火车站具有卖票功能,所以需要实现SellTickets接口public class TrainStation imp原创 2021-02-02 19:26:02 · 176 阅读 · 0 评论 -
代理模式
一 结构型模式结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理模式适配器模式装饰者模式桥接模式外观模式组合模式享元模式二 代理模式1 概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用原创 2021-02-01 20:47:40 · 242 阅读 · 0 评论 -
建造者模式扩展
一 说明建造者模式除了上面的用途外,在开发中还有一个常用的使用方式,就是当一个类构造器需要传入很多参数时,如果创建这个类的实例,代码可读性会非常差,而且很容易引入错误,此时就可以利用建造者模式进行重构。二 重构前代码public class Phone { private String cpu; private String screen; private String memory; private String mainboard; public Phon原创 2021-01-31 19:58:55 · 356 阅读 · 2 评论 -
建造者模式
一 点睛将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的原创 2021-01-31 19:54:30 · 416 阅读 · 0 评论 -
原型模式
一 点睛用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。二 结构原型模式包含如下角色:抽象原型类:规定了具体原型对象必须实现的的 clone() 方法。具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。访问类:使用具体原型类中的 clone() 方法来复制新的对象。类图三 实现原型模式的克隆分为浅克隆和深克隆。浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。原创 2021-01-31 16:24:25 · 530 阅读 · 0 评论 -
工厂方法在JDK中的运用
一 代码JDK源码解析-Collection.iterator方法public class Demo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("令狐冲"); list.add("风清扬"); list.add("任我行"); //获取迭代器对象原创 2021-01-31 15:59:05 · 434 阅读 · 0 评论 -
模式扩展——简单工厂加配置文件
一 点睛可以通过工厂模式+配置文件的方式解除工厂对象和产品对象的耦合。在工厂类中加载配置文件中的全类名,并创建对象进行存储,客户端如果需要对象,直接进行获取即可。二 实现定义配置文件为了演示方便,我们使用properties文件作为配置文件,名称为bean.propertiesamerican=com.itheima.pattern.factory.config_factory.AmericanCoffeelatte=com.itheima.pattern.factory.config_fact原创 2021-01-31 12:22:15 · 556 阅读 · 0 评论 -
抽象工厂模式
一 点睛工厂方法模式考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、传智播客只培养计算机软件专业的学生等。这些工厂只生产同种类产品,同种类产品称为同等级产品,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,下图所示横轴是产品等级,也就是同一类产品;纵轴原创 2021-01-31 12:07:50 · 350 阅读 · 0 评论 -
工厂方法模式
一 点睛工厂方法模式完全遵循开闭原则。1 概念定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。2 结构工厂方法模式的主要角色:抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。具体产品(Concre原创 2021-01-31 09:45:16 · 205 阅读 · 0 评论 -
简单工厂模式
一 需求需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:二 代码实现针对上面设计的代码实现如下:Coffeepublic abstract class Coffee { public abstract String getName(); // 加糖 public void原创 2021-01-31 09:09:16 · 508 阅读 · 0 评论 -
单例模式在JDK中的使用
一 点睛Runtime类是使用的单例设计模式。二 分析通过源代码查看使用的是哪种单例模式public class Runtime { private static Runtime currentRuntime = new Runtime(); /** * Returns the runtime object associated with the current Java application. * Most of the methods of class &原创 2021-01-30 20:05:05 · 758 阅读 · 0 评论 -
单例模式存在的问题以及解决方案
一 问题演示1 破坏单例模式除枚举方式外,其它单例类(Singleton)可以创建多个对象。有两种方式可以破坏单例模式,分别是序列化和反射。1.1 序列化反序列化Singleton类:public class Singleton implements Serializable { // 私有构造方法 private Singleton() {} private static class SingletonHolder { private static f原创 2021-01-30 19:50:06 · 1563 阅读 · 0 评论 -
单例模式的结构和实现
一 点睛单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。二 单例模式的结构单例模式的主要有以下角色:单例类:只能创建一个实例的类。访问类:使用单例类。三 单例模式的实现单例设计模式分类两种: 饿汉式:类加载就会导致该单实例对象原创 2021-01-30 19:38:20 · 552 阅读 · 0 评论 -
合成复用原则
一 点睛合成复用原则是指:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。通常类的复用分为继承复用和合成复用两种。继承复用虽然有简单和易实现的优点,但它也存在以下缺点:a 继承复用破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。b 子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。c 它限制了复用的灵活性。从父类继承而来的实现是静态的,在编译时已经定义,所以在运行时不可能原创 2021-01-30 14:43:37 · 1826 阅读 · 0 评论 -
迪米特法则
一 点睛迪米特法则又叫最少知识原则。只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问原创 2021-01-30 14:37:24 · 381 阅读 · 0 评论 -
接口隔离原则
一 点睛客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。二 需求安全门案例:我们需要创建一个黑马品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。三 反例1 类图2 代码SafetyDoorpublic interface SafetyDoor { // 防盗 void antiTheft(); // 防火 void fireProof(); // 防水原创 2021-01-29 20:03:25 · 263 阅读 · 0 评论 -
依赖倒转原则
一 点睛高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。二 需求现要组装一台电脑,需要配件cpu,硬盘,内存条。只有这些配置都有了,计算机才能正常的运行。选择cpu有很多选择,如Intel,AMD等,硬盘可以选择希捷,西数等,内存条可以选择金士顿,海盗船等。三 反例1 类图2 代码希捷硬盘类(XiJieHardDisk):public class XiJieHa原创 2021-01-29 19:50:40 · 285 阅读 · 0 评论 -
里氏替换原则
一 点睛里氏代换原则是面向对象设计的基本原则之一。里氏代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。如果通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的概率会非常大。下面是一个违背里氏替换原则的经典例子。二 反例——正方形是长方形1 分析在数学领域里,正方形毫无疑问是长原创 2021-01-28 20:34:06 · 1189 阅读 · 0 评论 -
开闭原则实战
一点睛对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。二 需求下面以 搜狗输入法 的皮肤为例介绍开闭原则的应用。分析:搜狗输入法 的皮肤是输入法背景图片、窗口颜色和原创 2021-01-28 20:04:39 · 671 阅读 · 2 评论 -
类与类的表示关系
一 关联关系关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。先介绍一般关联。关联又可以分为单向关联,双向关联,自关联。1 单向关联在UML类图中单向关联用一个带箭头的实线表示。上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。2 双向关联从上图中很容易看出,所谓的双向关联就是双方各自持有对方类型的成员原创 2021-01-28 19:48:03 · 1994 阅读 · 1 评论 -
UML类图表示法
一 UML图统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。二 类图概述类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。三 类图的原创 2021-01-27 20:52:42 · 2076 阅读 · 0 评论