软件设计的目标

一.面向对象编程 

        1、可维护性

     当日后代码需要修改逻辑的时候,只需要修改某些类或者增加某些类,对主程序和大部分代码不需要修改,体现为可维护性。

    2、可复用性

     将一定的代码进行封装,在多处可以重复使用。

    3、可扩展性

     当增加新的功能模块时,只需要增加某些代码,对整体代码架构不需要做太多修改。

    4、高灵活性

     通过封装、继承、多态把程序的耦合度降低,耦合度降低后,使代码的使用更加灵活,更容易修改,易于复用。


二.分别用简单工厂模式和工厂方法模式实现软件的可维护性和提高可复用性

    1.简单工厂模式

       专门定义一个工厂类负责创建其他类的实例,最大的优点在于工厂类中包含了必要的逻辑,根据客户需要的条件动态实例化相关的类

        # UML图

       

   # 程序:

 Fruit.java(接口)

package com.simple;

//实现水果类 Fruit.java
public interface Fruit{
  void plant();        //定义种植方法
  void grow();           //定义生长方法
  void harvest();
}

SimpleFactory.java

package com.simple;

//新建一个简单工厂类 SimpleFactory.java
public class SimpleFactory{
  public static Fruit getFruitObj(String type){
   Fruit obj = null;
   if(type.equals("apple")){
		obj = (Fruit) new Apple();
   }
	return obj;
  }
}

Apple.java

package com.simple;

//实现苹果类 Apple.java
public class Apple implements Fruit{
 @Override
	public void plant() {
		// TODO Auto-generated method stub
		System.out.print("种植了苹果");
		
	}

	@Override
	public void grow() {
		// TODO Auto-generated method stub
		System.out.print("苹果生长了");
	}

	@Override
	public void harvest() {
		// TODO Auto-generated method stub
		System.out.print("苹果结果了");
		
	}
}

main.java

package com.simple;

//客户端接口
public class main{
  public static void main(String args[]){
   Fruit fu =SimpleFactory.getFruitObj("apple");
		fu.plant();
		System.out.println();
		fu.grow();
		System.out.println();
		fu.harvest();
  }
}

结果:

种植了苹果
苹果生长了
苹果结果了

 

  2.工厂方法模式

      创建对象的接口,让子类去决定具体实例化的对象,把简单的内部逻辑判断移到了客户端代码。工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。

   # UML 图

    

    程序:

 Fruit.java

package com.Factory;

//实现水果类 Fruit.java
public interface Fruit{
    void plant();        //定义种植方法
    void grow();           //定义生长方法
    void harvest();
}

Factory.java

package com.Factory;

//定义一个抽象工厂方法
public abstract class Factory {
	public abstract Fruit getapple();
	public static Factory getFruitFactory(String type){
		Factory f = null;
		if(type.equals("apple")){
			f=new AppleFactory();
			f.getapple();
		}
		return f;	
   }
}
 

AppleFactory.java

package com.Factory;

//定义一个苹果的工厂
public class AppleFactory extends Factory{
public Apple getapple(){
        //返回苹果的对象
	return new Apple();
 }
}

Apple.java

package com.Factory;

//定义一个苹果。与上面简单工厂相同
public class Apple implements Fruit{

	@Override
	public void plant() {
		// TODO Auto-generated method stub
		System.out.print("123");
	}

	@Override
	public void grow() {
		// TODO Auto-generated method stub
		System.out.print("苹果生长了");
	}

	@Override
	public void harvest() {
		// TODO Auto-generated method stub
		System.out.print("苹果结果了");
	}

}

client.java

package com.Factory;
//定义主函数
public class client {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//执行 方法
		Fruit f =(Fruit) Factory.getFruitFactory("apple");
		f.plant();
		f.grow();
		f.harvest();		
	}
}

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇潇雨歇_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值