什么是设计模式?
设计模式就是在工作中经常遇到的一类问题的解决方案,是一种解决问题的方法,更是一种思想,是智慧的结晶。
设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。
构成模式的四个基本要素:
(1)模式名称:一个助记名,它用一两个词来描述模式的问题、解决方案和效果。
(2)问题(problem) :描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,
如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
(3)解决方案(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,
可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
(4)效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,
但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。
因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
1.dps_01_build_type中是创建型模式(共6种);
2.dps_02_structure_type中是结构型模式(共7种) ;
3.dps_03_action_type中是行为模式(共11种);
4.你可能会数一下源代码里面一共有几种设计模式,表面上看只有22种,实际上关于工厂模式的三种代表都放在dps_01_build_type.dp02_factory
包中,包括简单工厂,工厂方法,抽象工厂,这样算起来共有24种,但是,由于简单工厂模式违背开放-封闭原则,不建议使用,因此共有 24 – 1 = 23种,
刚才与GOF提出的数字相吻合;
5.util包是工具类,调度时非常有用,跟设计模式无关;
6.每种设计模式中都有一个readme.txt文件,里面包含模式介绍,角色种类和一些其他说明;
7.DesignPattern是eclipse工程,直接在Eclipse里面导入即可
8.JDK要求1.6以上
资源文件列表
DesignPattern/.classpath , 414
DesignPattern/.mymetadata , 312
DesignPattern/.myumldata , 66
DesignPattern/.project , 1015
DesignPattern/.settings/org.eclipse.jdt.core.prefs , 629
DesignPattern/.settings/org.eclipse.jdt.ui.prefs , 99
DesignPattern/src/dps_01_build_type/dp01_singleton/eager/example1/EagerSingleton.java , 682
DesignPattern/src/dps_01_build_type/dp01_singleton/eager/example1/Test.java , 601
DesignPattern/src/dps_01_build_type/dp01_singleton/lazy/example1/LazySingleton.java , 756
DesignPattern/src/dps_01_build_type/dp01_singleton/lazy/example1/Test.java , 594
DesignPattern/src/dps_01_build_type/dp01_singleton/readme.txt , 722
DesignPattern/src/dps_01_build_type/dp01_singleton/register/example1/RegisterSingleton.java , 1899
DesignPattern/src/dps_01_build_type/dp01_singleton/register/example1/RegisterSingletonChild.java , 697
DesignPattern/src/dps_01_build_type/dp01_singleton/register/example1/Test.java , 1141
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/concrete_creator/AccessFactory.java , 939
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/concrete_creator/SqlServerFactory.java , 960
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/concrete_product/AccessDeptDAO.java , 759
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/concrete_product/AccessUserDAO.java , 759
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/concrete_product/SqlServerDeptDAO.java , 773
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/concrete_product/SqlServerUserDAO.java , 773
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/creator/Factory.java , 545
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/model/Dept.java , 739
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/model/User.java , 737
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/product/DeptDAO.java , 467
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/product/UserDAO.java , 467
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example1/Test.java , 1221
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/concrete_creator/DAOFactory.java , 1243
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/concrete_product/AccessDeptDAO.java , 759
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/concrete_product/AccessUserDAO.java , 759
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/concrete_product/SqlServerDeptDAO.java , 773
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/concrete_product/SqlServerUserDAO.java , 773
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/model/Dept.java , 739
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/model/User.java , 737
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/product/DeptDAO.java , 467
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/product/UserDAO.java , 467
DesignPattern/src/dps_01_build_type/dp02_factory/abstract_factory/example2/Test.java , 1144
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/concrete_creator/AudiDriver.java , 557
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/concrete_creator/BenzDriver.java , 559
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/concrete_creator/BmwDriver.java , 554
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/concrete_product/Audi.java , 376
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/concrete_product/Benz.java , 376
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/concrete_product/Bmw.java , 374
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/creator/Driver.java , 329
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/product/Car.java , 221
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example1/Test.java , 663
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_creator/FactoryAdd.java , 685
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_creator/FactoryDiv.java , 685
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_creator/FactoryMul.java , 685
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_creator/FactorySub.java , 685
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_product/OperationAdd.java , 502
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_product/OperationDiv.java , 502
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_product/OperationMul.java , 502
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/concrete_product/OperationSub.java , 502
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/creator/Factory.java , 469
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/product/Operation.java , 362
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example2/Test.java , 1406
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example3/concrete_creator/FactoryUndergraduate.java , 703
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example3/concrete_creator/FactoryVolunteer.java , 693
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example3/concrete_product/Undergraduate.java , 339
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example3/concrete_product/Volunteer.java , 337
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example3/creator/Factory.java , 467
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example3/product/LeiFeng.java , 493
DesignPattern/src/dps_01_build_type/dp02_factory/factory_method/example3/Test.java , 1310
DesignPattern/src/dps_01_build_type/dp02_factory/readme.txt , 2889
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example1/concrete_creator/Driver.java , 1088
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example1/concrete_product/Audi.java , 376
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example1/concrete_product/Benz.java , 376
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example1/concrete_product/Bmw.java , 374
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example1/product/Car.java , 221
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example1/Test.java , 607
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example2/concrete_creator/OperationFactory.java , 1344
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example2/concrete_product/OperationAdd.java , 498
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example2/concrete_product/OperationDiv.java , 498
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example2/concrete_product/OperationMul.java , 498
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example2/concrete_product/OperationSub.java , 498
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example2/product/Operation.java , 362
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example2/Test.java , 958
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example3/concrete_creator/LeiFengFactory.java , 995
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example3/concrete_product/Undergraduate.java , 335
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example3/concrete_product/Volunteer.java , 333
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example3/product/LeiFeng.java , 493
DesignPattern/src/dps_01_build_type/dp02_factory/simple_factory/example3/Test.java , 1002
DesignPattern/src/dps_01_build_type/dp03_build/example1/builder/Builder.java , 528
DesignPattern/src/dps_01_build_type/dp03_build/example1/concrete_builder/ConcreteBuilder1.java , 857
DesignPattern/src/dps_01_build_type/dp03_build/example1/concrete_builder/ConcreteBuilder2.java , 857
DesignPattern/src/dps_01_build_type/dp03_build/example1/director/Director.java , 501
DesignPattern/src/dps_01_build_type/dp03_build/example1/product/Product.java , 576
DesignPattern/src/dps_01_build_type/dp03_build/example1/Test.java , 1041
DesignPattern/src/dps_01_build_type/dp03_build/example2/builder/PersonBuilder.java , 784
DesignPattern/src/dps_01_build_type/dp03_build/example2/concrete_builder/PersonFatBuilder.java , 1249
DesignPattern/src/dps_01_build_type/dp03_build/example2/concrete_builder/PersonThinBuilder.java , 1250
DesignPattern/src/dps_01_build_type/dp03_build/example2/director/PersonDirector.java , 915
DesignPattern/src/dps_01_build_type/dp03_build/example2/product/Person.java , 142
DesignPattern/src/dps_01_build_type/dp03_build/example2/Test.java , 916
DesignPattern/src/dps_01_build_type/dp03_build/example3/builder/MediaBuilder.java , 612
DesignPattern/src/dps_01_build_type/dp03_build/example3/concrete_builder/BookBuilder.java , 977
DesignPattern/src/dps_01_build_type/dp03_build/example3/concrete_builder/MagazineBuilder.java , 999
DesignPattern/src/dps_01_build_type/dp03_build/example3/concrete_builder/WebSiteBuilder.java , 992
DesignPattern/src/dps_01_build_type/dp03_build/example3/director/MediaDirector.java , 1018
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/item/Article.java , 394
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/item/Chapter.java , 394
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/item/common/MediaItem.java , 487
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/item/WebPage.java , 394
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/media/Book.java , 234
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/media/common/Media.java , 849
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/media/Magazine.java , 238
DesignPattern/src/dps_01_build_type/dp03_build/example3/product/media/WebSite.java , 237
DesignPattern/src/dps_01_build_type/dp03_build/example3/Test.java , 2830
DesignPattern/src/dps_01_build_type/dp03_build/readme.txt , 921
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example1/concrete_prototype/AppleComputer.java , 739
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example1/concrete_prototype/HPComputer.java , 728
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example1/prototype/Computer.java , 2209
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example1/Test.java , 1078
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example2/concrete_prototype/Resume.java , 2449
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example2/prototype/AbstractPrototype.java , 310
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example2/Test.java , 1144
DesignPattern/src/dps_01_build_type/dp04_prototype/deep/example2/WorkExperience.java , 1269
DesignPattern/src/dps_01_build_type/dp04_prototype/readme.txt , 1366
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example1/concrete_prototype/AppleComputer.java , 745
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example1/concrete_prototype/HPComputer.java , 734
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example1/prototype/Computer.java , 1848
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example1/Test.java , 1089
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example2/concrete_prototype/Resume.java , 1990
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example2/prototype/AbstractPrototype.java , 313
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example2/Test.java , 1150
DesignPattern/src/dps_01_build_type/dp04_prototype/shallow/example2/WorkExperience.java , 968
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example1/adaptee/Adaptee.java , 302
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example1/adapter/Adapter.java , 482
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example1/target/Target.java , 296
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example1/Test.java , 475
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example2/adaptee/Circle.java , 334
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example2/adapter/ShapeAdapter.java , 479
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example2/target/Shape.java , 238
DesignPattern/src/dps_02_structure_type/dp01_adapter/class_/example2/Test.java , 478
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example1/adaptee/Adaptee.java , 302
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example1/adapter/Adapter.java , 665
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example1/target/Target.java , 296
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example1/Test.java , 475
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example2/adaptee/Circle.java , 334
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example2/adapter/ShapeAdapter.java , 675
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example2/target/Shape.java , 374
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example2/Test.java , 471
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example3/adaptee/Center.java , 627
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example3/adaptee/ForeignCenter.java , 714
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example3/adaptee/Forwards.java , 631
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example3/adaptee/Guards.java , 627
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example3/adapter/Translator.java , 757
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example3/target/Player.java , 522
DesignPattern/src/dps_02_structure_type/dp01_adapter/object/example3/Test.java , 957
DesignPattern/src/dps_02_structure_type/dp01_adapter/readme.txt , 962
DesignPattern/src/dps_02_structure_type/dp02_bridge/example1/abstraction/Abstraction.java , 565
最多只能显示150条信息!
