一. 模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
设计模式:在这个例题中,采用的是简单工厂模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
//简单工厂模式
interface Person{
void IsPerson();
}
class Man implements Person{
public void IsPerson(){
System.out.println("产生了一个男人");
}
}
class Woman implements Person{
public void IsPerson(){
System.out.println("产生了一个女人");
}
}
class Robot implements Person{
public void IsPerson(){
System.out.println("产生了一个机器人");
}
}
class Nvwa{
Person CreatPerson(char person){
if(person == 'M'){
return new Man();
}
else if(person == 'W'){
return new Woman();
}
else if(person == 'R'){
return new Robot();
}
//假如输入不是'w','m','r',那么将会默认创建一个Man对象
else
return new Man();
}
}
public class Example{
public static void main(String[] args) {
char s = 'M';
Nvwa f = new Nvwa();
Person p = f.CreatPerson(s);
p.IsPerson();
}
}
二.海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。
设计模式:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
//工厂方法模式
//注意:由于接口中的方法一定是public abstract方法,所以类在重写接口方法时不仅要去掉abstract修饰符、给出方法体,
//而且方法的访问权限一定要明显地用public来修饰(否则就降低了权限,这是不允许的)。
interface Factory{
Condition CreateCondition();
}
class HaierFactory implements Factory{
public Condition CreateCondition(){
return new HaierCondition();
}
}
class MideaFactory implements Factory{
public Condition CreateCondition(){
return new MideaCondition();
}
}
interface Condition{
void WhatCondition();
}
class HaierCondition implements Condition{
public void WhatCondition(){
System.out.println("HaierCondition");
}
}
class MideaCondition implements Condition{
public void WhatCondition(){
System.out.println("MiderCondition");
}
}
public class example01{
public static void main(String[] args) {
Factory f1 = new HaierFactory();
Condition haier = f1.CreateCondition();
haier.WhatCondition();
Factory f2 = new MideaFactory();
Condition midea = f2.CreateCondition();
midea.WhatCondition();
}
}
三.电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。
设计模式:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。
interface AbstructProduct{
void product();
}
class ProductRam implements AbstructProduct{
public void product(){
System.out.println("RAM");
}
ProductRam(){
product();
}
}
class ProductCpu implements AbstructProduct{
public void product(){
System.out.println("CPU");
}
ProductCpu(){
product();
}
}
interface AbstructFactory{
AbstructProduct CreatProductRam();
AbstructProduct CreatProductCpu();
}
class ConcreatFactoryPC implements AbstructFactory{
public AbstructProduct CreatProductRam(){
System.out.print("PC:");
return new ProductRam();
}
public AbstructProduct CreatProductCpu(){
System.out.print("PC:");
return new ProductCpu();
}
}
class ConcreatFactoryMAC implements AbstructFactory{
public AbstructProduct CreatProductRam(){
System.out.print("MAC:");
return new ProductRam();
}
public AbstructProduct CreatProductCpu(){
System.out.print("MAC:");
return new ProductCpu();
}
}
public class Example{
public static void main(String[] args) {
AbstructFactory f1 = new ConcreatFactoryMAC();
f1.CreatProductCpu();
f1.CreatProductRam();
AbstructFactory f2 = new ConcreatFactoryPC();
f2.CreatProductRam();
f2.CreatProductCpu();
}
}
总结:在程序中使用了各种不同的设计模式之后,才发现下写代码之前的总体设计有多么重要。因为软件的需求都是在变化的,如果采用不适合的模式,当你想要对程序做出一些改变时,要么就改变不了,要么就要做很多重复的工作。各种不同的设计模式正是为了解决这些问题。使用设计模式可以解决重用代码、让代码更容易被他人理解、保证代码可靠性。如果不采用设计模式,对现在的一个小小的程序做出一些修改都要添加或者修改很多代码,甚至要重新编写代码,更何况那些大型软件。