Spring 的两个特性 IOC 、AOP
关于交通工具:::
以老张开车去东北为例::
工厂是指 自己生产自己的产品,,不再new
下面是简单工厂模式::
package com.linux_lihuafeng.factory;
public class Test {
public static void main(String[] args) {
Car c = Car.getInstance();
c.run();
}
}
package com.linux_lihuafeng.factory;
public class Car {
private Car(){}
public static Car getInstance() {
return new Car();
}
public void run() {
System.out.println("冒着烟奔跑中car......");
}
}
只给司机一辆车;; 即单例模式{从始至终只有一个车}
package com.linux_lihuafeng.factory;
public class Car {
//从始至终只开一辆车,,{单例}
private static Car car = new Car();
//{多例}
private static List<Car> cars = new ArrayList<Car>();
public static Car getInstance() {
return car;
}
public void run() {
System.out.println("冒着烟奔跑中car......");
}
}
2.任意定制交通工具的类型和生产过程
package com.linux_lihuafeng.factory;
public class CarFactory extends VehicleFactory{
// public Car createFactory() {
// return new Car();
// }
@Override
public Movable create() {
return new Car();
}
}
package com.linux_lihuafeng.factory;
public class PlaneFactory extends VehicleFactory{
@Override
public Movable create() {
return new Plane();
}
}
package com.linux_lihuafeng.factory;
public abstract class VehicleFactory {
abstract Movable create();
}
package com.linux_lihuafeng.factory;
public class Test {
public static void main(String[] args) {
Movable m = new Plane();
m.run();
}
}
上面是简单工厂的示例
下面是抽象工厂:
3.系列产品(车、武器、食物、、、、)
应该有一个工厂用于生产一系列产品
package com.linux_lihuafeng.abstractfactory;
//用于产生系列产品
public class DefaultFactory {
public Car creatCar() {
return new Car();
}
public AK47 createAK47() {
return new AK47();
}
public Apple createApple() {
return new Apple();
}
}
package com.linux_lihuafeng.abstractfactory;
public class Apple {
public void getName() {
System.out.println("Apple...");
}
}
package com.linux_lihuafeng.abstractfactory;
import java.util.ArrayList;
import java.util.List;
public class Car {
public void run() {
System.out.println("冒着烟奔跑中car......");
}
}
package com.linux_lihuafeng.abstractfactory;
public class AK47 {
public void shoot() {
System.out.println("哒哒哒");
}
}
package com.linux_lihuafeng.abstractfactory;
public class Test {
public static void main(String[] args) {
//当一个人手里控制的产品很多时,,,需要一个工厂生产出一系列产品
// Car c = new Car();
// c.run();
// AK47 ak = new AK47();
// ak.shoot();
// Apple ap = new Apple();
// ap.getName();
DefaultFactory df = new DefaultFactory();
Car c = df.creatCar();
c.run();
AK47 ak = df.createAK47();
ak.shoot();
Apple ap = df.createApple();
ap.getName();
}
}
进一步进行抽象:::
画一个类图 如下:
AbstractFactory
MagicFactory DefaultFactory
v1 f1 w2 v2 f2 w2
v1 v2 f1 f2 w1 w2
Vehicle Food Weapon
代码如下::
package com.linux_lihuafeng.abstractfactory;
public abstract class AbstractFactory {
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
public abstract Food createFood();
}
===============================================
package com.linux_lihuafeng.abstractfactory;
//用于产生系列产品
public class DefaultFactory extends AbstractFactory{
// public Car creatCar() {
// return new Car();
// }
// public AK47 createAK47() {
// return new AK47();
// }
//
// public Apple createApple() {
// return new Apple();
// }
@Override
public Food createFood() {
// TODO Auto-generated method stub
return new Apple();
}
@Override
public Vehicle createVehicle() {
// TODO Auto-generated method stub
return new Car();
}
@Override
public Weapon createWeapon() {
// TODO Auto-generated method stub
return new AK47();
}
}
package com.linux_lihuafeng.abstractfactory;
public class MagicFactory extends AbstractFactory{
// public Broom createBroom() {
// return new Broom();
// }
//
//
// public MagicStick createMagicStick() {
// return new MagicStick();
// }
//
//
// public MushRoom createMushRoom() {
// return new MushRoom();
// }
@Override
public Food createFood() {
// TODO Auto-generated method stub
return new MushRoom();
}
@Override
public Vehicle createVehicle() {
// TODO Auto-generated method stub
return new Broom();
}
@Override
public Weapon createWeapon() {
// TODO Auto-generated method stub
return new MagicStick();
}
}
==========================================
package com.linux_lihuafeng.abstractfactory;
public abstract class Vehicle {
public abstract void run() ;
}
package com.linux_lihuafeng.abstractfactory;
public abstract class Weapon {
public abstract void shoot() ;
}
package com.linux_lihuafeng.abstractfactory;
public abstract class Food {
public abstract void getName() ;
}
===========================================
package com.linux_lihuafeng.abstractfactory;
public class AK47 extends Weapon{
public void shoot() {
System.out.println("哒哒哒");
}
}
package com.linux_lihuafeng.abstractfactory;
public class Apple extends Food{
public void getName() {
System.out.println("Apple...");
}
}
package com.linux_lihuafeng.abstractfactory;
import java.util.ArrayList;
import java.util.List;
public class Car extends Vehicle{
public void run() {
System.out.println("冒着烟奔跑中car......");
}
}
==================================================
package com.linux_lihuafeng.abstractfactory;
public class Broom extends Vehicle{
public void run() {
System.out.println("一路灰...");
}
}
package com.linux_lihuafeng.abstractfactory;
public class MagicStick extends Weapon{
@Override
public void shoot() {
// TODO Auto-generated method stub
System.out.println("fire hu hu hu...");
}
}
package com.linux_lihuafeng.abstractfactory;
public class MushRoom extends Food{
@Override
public void getName() {
// TODO Auto-generated method stub
System.out.println("mushroom");
}
}
=====================================================
package com.linux_lihuafeng.abstractfactory;
public class Test {
public static void main(String[] args) {
//当一个人手里控制的产品很多时,,,需要一个工厂生产出一系列产品
// Car c = new Car();
// c.run();
// AK47 ak = new AK47();
// ak.shoot();
// Apple ap = new Apple();
// ap.getName();
// DefaultFactory df = new DefaultFactory();
// Car c = df.creatCar();
// c.run();
// AK47 ak = df.createAK47();
// ak.shoot();
// Apple ap = df.createApple();
// ap.getName();
AbstractFactory af = new MagicFactory();
Food f = af.createFood();
f.getName();
Vehicle v = af.createVehicle();
v.run();
Weapon w = af.createWeapon();
w.shoot();
}
}
}
import java.util.Properties;
Properties props = new Properties();
try {
props.load(Test.class.getClassLoader().
getResourceAsStream("com/linux_lihuafeng/spring/factory/spring.properties"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String vehicleTypeName = props.getProperty("VehicleType");
System.out.println(vehicleTypeName);
Object o;
try {
o = Class.forName(vehicleTypeName).newInstance();
Movable m = (Movable)o;
m.run();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void run() {
}
import java.util.List;
public void run() {
System.out.println("冒着烟奔跑中car......");
}
}